package es.us.master.ejb;

import es.us.master.entity.Usuario;

import java.util.List;

import javax.ejb.Stateless;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
public class UsuarioFacade extends AbstractFacade<Usuario> implements UsuarioFacadeLocal {
    @PersistenceContext(unitName = "GestorTareas-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public UsuarioFacade() {
        super(Usuario.class);
    }
    
    @Override
    public List<Usuario> findAll() {
        Query query = em.createNamedQuery("Usuario.findAll");
        
        return (List<Usuario>) query.getResultList();
    }

    @Override
    public Usuario findByIdUsuario(Integer idUsuario) {
        Usuario res = null;
        Query query = em.createNamedQuery("Usuario.findByIdUsuario").
                setParameter("idUsuario", idUsuario);
        
        try {
            res = (Usuario) query.getSingleResult();
        } catch(NoResultException e) {
        }
        
        return res;
    }

    @Override
    public List<Usuario> findByNombre(String nombre) {
        Query query = em.createNamedQuery("Usuario.findByNombre").
                setParameter("nombre", "%" + nombre + "%");
        
        return (List<Usuario>) query.getResultList();
    }

    @Override
    public List<Usuario> findByApellidos(String apellidos) {
        Query query = em.createNamedQuery("Usuario.findByApellidos").
                setParameter("apellidos", "%" + apellidos + "%");
        
        return (List<Usuario>) query.getResultList();
    }

    @Override
    public Usuario findByUsuarioAndPassword(String usuario, String password) {
        Usuario res = null;
        Query query = em.createNamedQuery("Usuario.findByUsuarioAndPassword").
                setParameter("usuario", usuario).
                setParameter("password", password);
        
        try {
            res = (Usuario) query.getSingleResult();
        } catch(NoResultException e) {
        }
        
        return res;
    }

    @Override
    public Usuario findByEmail(String email) {
        Usuario res = null;
        Query query = em.createNamedQuery("Usuario.findByEmail").
                setParameter("email", email);
        
        try {
            res = (Usuario) query.getSingleResult();
        } catch(NoResultException e) {
        }
        
        return res;
    }
}
